package net.goutalk.glcs.module.form.service;

import cn.hutool.db.Entity;
import cn.hutool.db.Session;
import net.goutalk.glcs.common.page.PageOutput;
import net.goutalk.glcs.module.form.dto.*;
import net.goutalk.glcs.module.form.dto.*;
import org.apache.commons.lang3.tuple.Triple;

import java.util.List;
import java.util.Map;

/**
 * @Author: tanyujie
 * @Date: 2022/5/11 14:57
 */
public interface IFormExecuteService {
    /**
     * 获取自定义表单不分页列表数据
     * @param dto
     * @return
     */
    List<Entity> list(FormExecuteListDto dto);

    /**
     * App 获取自定义表单不分页列表数据
     * @param dto
     * @return
     */
    List<Entity> appList(AppFormExecuteListDto dto);

    /**
     * 获取自定义表单分页列表数据
     * @param dto
     * @return
     */
    PageOutput<Entity> page(FormExecutePageDto dto);

    /**
     * App 获取自定义表单分页列表数据
     * @param dto
     * @return
     */
    PageOutput<Entity> appPage(AppFormExecutePageDto dto);

    /**
     * 获取自定义表单 表单数据
     * @return
     */
    Object info(FormExecuteInfoDto dto);

    /**
     * App 获取自定义表单 表单数据
     * @return
     */
    Object appInfo(AppFormExecuteInfoDto dto);

    /**
     * 自定义表单 新增
     * @param dto
     * @return
     */
    Boolean add(FormExecuteAddOrUpdateDto dto);

    /**
     * App 自定义表单 新增
     * @param dto
     * @return
     */
    Boolean appAdd(AppFormExecuteAddOrUpdateDto dto);

    /**
     * 自定义表单 修改
     * @param dto
     * @return
     */
    Boolean update(FormExecuteAddOrUpdateDto dto);

    /**
     * app 自定义表单 修改
     * @param dto
     * @return
     */
    Boolean appUpdate(AppFormExecuteAddOrUpdateDto dto);

    /**
     * 自定义表单 删除
     * @param dto
     * @return
     */
    Boolean delete(FormExecuteDeleteDto dto);

    /**
     * app 自定义表单 删除
     * @param dto
     * @return
     */
    Boolean appDelete(AppFormExecuteDeleteDto dto);

    /**
     * 工作流调用 自定义表单 新增
     * @param dto
     * @return
     */
    Triple<Session, Long, Long> workflowAdd(FormExecuteWorkflowAddDto dto);


    /**
     * 工作流调用 自定义表单 修改
     * @param dto
     * @return
     */
    Triple<Session, Long, Long> workflowUpdate(FormExecuteWorkflowUpdateDto dto);

    /**
     * 工作流调用 自定义表单 新增或者修改
     * @param dto
     * @return
     */
    Triple<Session, Boolean, Long> workflowAddOrUpdate(FormExecuteWorkflowUpdateDto dto);

    /**
     * 获取自定义表单 表单数据
     * @return
     */
    Object workFlowInfo(FormExecuteWorkflowInfoDto dto);

    /**
     * 批量新增主表数据
     * @return
     */
    Boolean saveMainBatch(Long formTemplateId, List<Map<String, Object>> dataList);
}
